﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Text.RegularExpressions;
using System.Globalization;

namespace VISS.Web.Frontend {
    /// <summary>
    /// Summary description for Commons
    /// </summary>
    public class Commons {
        public Commons() {
            //
            // TODO: Add constructor logic here
            //
        }

        /// <summary>
        /// Định dạng số sang có dấu "," để phân chia đơn vị
        /// 3000000 => 3,000,000
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string IntToViewString(int value) {
            return value.ToString("#,##0");
        }

        /// <summary>
        /// Kiểm tra là số
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static bool IsNumber(string value) {
            for (int i = 0; i < value.Length; i++) {
                if (!char.IsNumber(value, i))
                    return false;
            }
            return true;
        }

        /// <summary>
        /// Xóa tất cả các tag html
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static string StripAllTag(string text) {
            return Regex.Replace(text, @"<(.|\n)*?>", string.Empty);
        }

        /// <summary>
        /// Cắt các từ quá dài trong chuỗi
        /// </summary>
        /// <param name="html"></param>
        /// <param name="numberChar"></param>
        /// <returns></returns>
        public static string BreakWords(string html, int numberChar) {
            if (!String.IsNullOrEmpty(html)) {
                return Regex.Replace(html, @"([^ ]{" + numberChar.ToString() + "})", "$1 ");
            }
            else
                return string.Empty;
        }

        /// <summary>
        /// Thay thế các ký tự đặc biệt
        /// </summary>
        /// <param name="text"></param>
        /// <returns></returns>
        public static string HtmlCharEncode(string text) {
            text = text.Replace("&", "&amp;");
            text = text.Replace("<", "&lt;");
            text = text.Replace(">", "&gt;");
            text = text.Replace("\"", "&#34;");

            return text;
        }

        /// <summary>
        /// Chuyển đơn vị từ Cm sang Met
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string ConvertCmToMet(int value, bool hasUnit) {
            if (value == 0) {
                return "Chưa cung cấp";
            }
            if (hasUnit) {
                return (value / (double)100).ToString("#,##0.#0m");
            }
            return (value / (double)100).ToString("#,##0.#0");
        }


        /// <summary>
        /// Định dạng lại thông tin cân nặng
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string FormatWeightString(int value) {
            if (value == 0) {
                return "Chưa cung cấp";
            }
            return value + " Kg";
        }

        /// <summary>
        /// Chuẩn hóa tên của người dùng
        /// Lọc bỏ các khoản trắng thừa và viết hoa đầu mỗi ký tự
        /// </summary>
        /// <param name="value"></param>
        /// <returns></returns>
        public static string NormalizeName(string value) {
            value = value.Trim();
            Regex rg = new Regex(@"\s+");
            value = rg.Replace(value, " ");
            return CultureInfo.CurrentCulture.TextInfo.ToTitleCase(value);
        }

        /// <summary>
        /// Kiểm tra email hợp lệ
        /// </summary>
        /// <param name="inputEmail"></param>
        /// <returns></returns>
        public static bool IsEmail(string inputEmail) {
            if (string.IsNullOrEmpty(inputEmail)) {
                return false;
            }
            string strRegex = @"^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}" +
                  @"\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\" +
                  @".)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$";
            Regex re = new Regex(strRegex);
            if (re.IsMatch(inputEmail))
                return (true);
            else
                return (false);
        }

        public static string CutShortName(string inputName) {
            if (string.IsNullOrEmpty(inputName)) {
                return string.Empty;
            }
            string[] temp = inputName.Split(new string[] { " " }, StringSplitOptions.RemoveEmptyEntries);
            int i = 0;
            if (temp.Length > 2) {
                while (i < temp.Length - 2) i++;
                return "... " + temp[i] + " " + temp[i + 1];
            }
            else if (temp.Length == 2) {
                return "... " + temp[1];
            }
            return "... " + temp[i];
        }
    }

    public enum EErrorType {
        UnKnown = 0,
        Http404 = 1,
        ProfileNotFound = 2,
        OpenIDNotFound = 3,
        AccessDenied = 4
    }
}